/*
 * @Authoryour name
 * @Date2020-12-16 23:06:46
 * @LastEditTime2020-12-16 23:06:46
 * @LastEditorsyour name
 * @DescriptionIn User Settings Edit
 * @FilePath\STM32H750_FreeRTOS\Bsp\bsp_io\bsp_gpio.c
 */ 
#include "bsp_gpio.h"

static bsp_gpio_cfg_t _gpio_cfg[GPIO_NUM] = 
{
    [GPIO_B0] = {GPIOB, GPIO_PIN_0},
    [GPIO_B1] = {GPIOB, GPIO_PIN_1},
    [GPIO_B2] = {GPIOB, GPIO_PIN_2},
};

void bsp_gpio_init(void)
{
    uint16_t index = 0;
    GPIO_InitTypeDef gpio_init;

    DEBUG_GPIO_CLK_EN();

    gpio_init.Mode = GPIO_MODE_OUTPUT_PP;
    gpio_init.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    gpio_init.Pull = GPIO_NOPULL;
    for(index = 0; index < (uint16_t)GPIO_NUM; ++index)
    {
        gpio_init.Pin = _gpio_cfg[index].pin;
        HAL_GPIO_Init(_gpio_cfg[index].port, &gpio_init);
    }
    bsp_gpio_clear(GPIO_B0);
    bsp_gpio_set(GPIO_B1);
    bsp_gpio_clear(GPIO_B2);
}

void bsp_gpio_deinit(void)
{
    uint16_t index = 0;
    for(index = 0; index < (uint16_t)GPIO_NUM; ++index)
    {
        HAL_GPIO_DeInit(_gpio_cfg[index].port, _gpio_cfg[index].pin);
    }
}

void bsp_gpio_set(uint8_t index)
{
    HAL_GPIO_WritePin(_gpio_cfg[index].port, _gpio_cfg[index].pin, GPIO_PIN_SET);
}

void bsp_gpio_clear(uint8_t index)
{
    HAL_GPIO_WritePin(_gpio_cfg[index].port, _gpio_cfg[index].pin, GPIO_PIN_RESET);
}

void bsp_gpio_toggle(uint8_t index)
{
    HAL_GPIO_TogglePin(_gpio_cfg[index].port, _gpio_cfg[index].pin);
}


